cbb3874749120b123a22337b6c1fec828d4366e2,Manager/src/main/java/com/rainbow/kam/ble_gatt_manager/manager/GattManager.java,GattManager,observeIndication,#BluetoothGattCharacteristic#,316
Before Change
@Override public Observable<GattObserveData> observeIndication(
final BluetoothGattCharacteristic characteristicToIndication) {
return Observable.merge(indicationSubject = PublishSubject.create(),
Observable.create((Observable.OnSubscribe<GattObserveData>) subscriber -> {
if (isConnected()) {
if (characteristicToIndication != null) {
bluetoothGatt.setCharacteristicNotification(characteristicToIndication, true);
BluetoothGattDescriptor indicationDescriptor = characteristicToIndication.getDescriptor(BluetoothGatts.CLIENT_CHARACTERISTIC_CONFIG);
indicationDescriptor.setValue(BluetoothGattDescriptor.ENABLE_INDICATION_VALUE);
bluetoothGatt.writeDescriptor(indicationDescriptor);
} else {
subscriber.onError(UUID_NOT_FOUND);
}
} else {
subscriber.onError(GATT_NOT_CONNECTED);
}
})).doOnSubscribe(() -> currentIndicationCharacteristic = characteristicToIndication);
}
After Change
@Override public Observable<BluetoothGattCharacteristic> observeIndication(
final BluetoothGattCharacteristic characteristicToIndication) {
return Observable.create((Observable.OnSubscribe<BluetoothGattCharacteristic>) subscriber -> {
GattException exception = checkGattStatusSuccess(characteristicToIndication);
if (exception != null) {
subscriber.onError(exception);
return;
}
gattManagerCallBack.setIndicateListener(new GattIndicateCharacteristicOnSubscribe() {
@Override
public void onCharacteristicIndicatePrepared(BluetoothGattCharacteristic characteristic) {
if (isCharacteristicAvailable(characteristic, currentIndicationCharacteristic)) {
subscriber.onStart();
}
}
@Override
public void onCharacteristicIndicateSucceeded(BluetoothGattCharacteristic characteristic) {
if (isCharacteristicAvailable(characteristic, currentIndicationCharacteristic)) {
subscriber.onNext(characteristic);
}
}
@Override
public void onCharacteristicIndicateFailed(BluetoothGattDescriptor descriptor, int status) {
if (isCharacteristicAvailable(descriptor.getCharacteristic(), currentIndicationCharacteristic)) {
subscriber.onError(new GattNotificationCharacteristicException(descriptor, DESCRIPTION_WRITE_FAIL, status));
}
}
});
bluetoothGatt.setCharacteristicNotification(characteristicToIndication, true);
BluetoothGattDescriptor indicationDescriptor = characteristicToIndication.getDescriptor(BluetoothGatts.CLIENT_CHARACTERISTIC_CONFIG);
indicationDescriptor.setValue(BluetoothGattDescriptor.ENABLE_INDICATION_VALUE);
bluetoothGatt.writeDescriptor(indicationDescriptor);
}).doOnSubscribe(() -> currentIndicationCharacteristic = characteristicToIndication)
.doOnUnsubscribe(() -> gattManagerCallBack.setIndicateListener(null));
}